/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modele;

/**
 *
 * @author Ngan Loong Har
 */
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Nishruu
 */
public class Etudiant extends User {

    private String tel1;
    private String tel2;
    private String email;
    private String url_photo;
    private Session_diplome sd;

    private ArrayList<Integer> equipes=null;

    /**
     *
     * @param id_etudiant
     * @param nom
     * @param prenom
     * @param tel1
     * @param tel2
     * @param email
     * @param url_photo
     * @param sd
     * @param equipes
     */
    public Etudiant(int id_etudiant, String nom, String prenom, String tel1, String tel2, String email, String url_photo, Session_diplome sd, ArrayList<Integer> equipes ){
        super(id_etudiant, nom, prenom);
        this.tel1 = tel1;
        this.tel2 = tel2;
        this.email = email;
        this.url_photo = url_photo;
        this.equipes = equipes;
    }

    /**
     *
     * @return
     */
    public String getEmail() {
        return email;
    }

    /**
     *
     * @return
     */
    public int getId_etudiant() {
        return super.getId_user();
    }

    /**
     *
     * @return
     */
    public String getTel1() {
        return tel1;
    }

    /**
     *
     * @return
     */
    public String getTel2() {
        return tel2;
    }

    /**
     *
     * @return
     */
    public String getUrl_photo() {
        return url_photo;
    }

    /**
     *
     * @return
     */
    public ArrayList<Integer> getEquipes() {
        return equipes;
    }

    /**
     *
     * @return
     */
    public Session_diplome getSd() {
        return sd;
    }

    

   /** Obtenir le membre d'id mem_id. Null si pas trouvé.
   *
    * @param id_etudiant
    * @return
   * @throws java.sql.SQLException
   */
    public static Etudiant getById(int id_etudiant) throws SQLException{
        Etudiant result = null;
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT C.nom,C.prenom,C.tel1,C.tel2,C.email,C.url_photo FROM candidat C, etudiant_session E WHERE C.id_candidat = E.id_candidat AND E.id_etudiant = '" + id_etudiant + "'";
          rs = select.executeQuery(sql);
          if (rs.next()) {
            result = new Etudiant(id_etudiant,rs.getString("nom"),rs.getString("prenom"),rs.getString("tel1"),rs.getString("tel2"),rs.getString("email"),rs.getString("url_photo"),Session_diplome.getById(id_etudiant), getIDEquipes(id_etudiant));
          }
        } finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return result;
    }

   /** Obtenir les id des groupes dont fait partie le membre. Null si pas trouvé.
   *
    * @param id_etudiant
   * @return
   * @throws java.sql.SQLException
   */
    public static ArrayList<Integer> getIDEquipes(int id_etudiant) throws SQLException{
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        ArrayList<Integer> groupes = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT E.* FROM membre_equipe M, equipe E, etudiant_session ET WHERE M.id_equipe = E.id_equipe AND M.id_etudiant = ET.id_etudiant AND ET.id_etudiant = '" + id_etudiant + "'";

          rs = select.executeQuery(sql);
          int g;
          groupes = new ArrayList<Integer>();
          while (rs.next() != false) {
            g = rs.getInt("id_equipe");
            groupes.add(g);
          }
        } finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return groupes;
    }
    /** Obtenir les groupes dont fait partie le membre. Null si pas trouvé.
   *
     * @param id_etudiant
   * @return
   * @throws java.sql.SQLException
   */
     public static ArrayList<Equipe> getEquipes(int id_etudiant) throws SQLException{
        ArrayList<Integer> idEquipes = getIDEquipes(id_etudiant);
        ArrayList<Equipe> equipes = null;
        if(idEquipes!=null){
            equipes = new ArrayList<Equipe>();
            for (int i=0;i<idEquipes.size();i++){
                equipes.add(Equipe.getById(idEquipes.get(i)));
            }
        }
        return equipes;
     }

     /** Obtenir les projets dont fait partie le membre. Null si pas trouvé.
   *
      * @param id_etudiant
      * @return
   * @throws java.sql.SQLException
   */
     public static ArrayList<Projet> getProjets(int id_etudiant) throws SQLException{
        ArrayList<Equipe> equipes = getEquipes(id_etudiant);
        ArrayList<Projet> projets = null;
        if(equipes!=null){
            projets = new ArrayList<Projet>();
            for (int i=0;i<equipes.size();i++){
                projets.add(equipes.get(i).getProjet());
            }
        }
        return projets;
     }

      /** Obtenir tous les étudiants. Null si pas trouvé.
   *
   * @param
   * @return
   * @throws java.sql.SQLException
   */
     public static List<Etudiant> getAll() throws SQLException{
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        List<Etudiant> liste_etudiant;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT E.id_etudiant, C.nom,C.prenom,C.tel1,C.tel2,C.email,C.url_photo FROM candidat C, etudiant_session E WHERE C.id_candidat = E.id_candidat";
          rs = select.executeQuery(sql);
          liste_etudiant = new ArrayList<Etudiant>();
          while (rs.next() != false) {
            liste_etudiant.add(new Etudiant(rs.getInt("id_etudiant"),rs.getString("nom"),rs.getString("prenom"),rs.getString("tel1"),rs.getString("tel2"),rs.getString("email"),rs.getString("url_photo"),Session_diplome.getById(rs.getInt("id_etudiant")), getIDEquipes(rs.getInt("id_etudiant"))));
          }
        } finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return liste_etudiant;
     }
     
        @Override
    public boolean equals(Object etudiant){
        
        return (super.getId_user()==((Etudiant)etudiant).getId_etudiant()
                &&super.getNom().equals(((Etudiant)etudiant).getNom())
                &&super.getPrenom().equals(((Etudiant)etudiant).getPrenom())
                &&tel1.equals(((Etudiant)etudiant).getTel1())
                &&tel2.equals(((Etudiant)etudiant).getTel2())
                &&email.equals(((Etudiant)etudiant).getEmail())
                &&url_photo.equals(((Etudiant)etudiant).getUrl_photo())
                &&equipes.equals(((Etudiant)etudiant).getEquipes()));
    }
}
